/*
 * Copyright (C) 2019  明心  <imleizhang@qq.com>
 * All rights reserved.
 *
 * This program is an open-source software; and it is distributed in the hope
 * that it will be useful, but WITHOUT ANY WARRANTY; without even the
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 * PURPOSE.
 * This program is not a free software; so you can not redistribute it(include
 * binary form and source code form) without my authorization. And if you
 * need use it for any commercial purpose, you should first get commercial
 * authorization from me, otherwise there will be your's legal&credit risks.
 *
 */

#ifndef GCTRLVIEW_H
#define GCTRLVIEW_H

#include <gPtrList.h>

#include "gConstDefine.h"
#include "gRect.h"
#include "gPixmap.h"
#include "gColor.h"
#include <gConstDefine.h>
#include <gGlobal.h>

class GCtrlForm;
class GCtrlDefaultAppStyle;
class GKeyEvent;
class GPaintEvent;

class QFormList : public GPtrList<GCtrlForm>
{
protected:
    virtual int compareItems ( GCtrlForm* p1, GCtrlForm* p2 );
};

class GCtrlView
{
public:
    GCtrlView (const GString& strPicPath="" );
    virtual ~GCtrlView();
    
    void appendForm ( GCtrlForm* );
    void removeForm ( GCtrlForm* );
    void setFocusToFrm ( GCtrlForm* );
    
    GCtrlForm* getFocusFrm()
    {
        return m_pFocusForm;
    }
    
    void setStyle ( GCtrlDefaultAppStyle* );
    GCtrlDefaultAppStyle* appStyle();
    void inSort ( GCtrlForm* );
    int width () const;
    int height () const;
    void setSize(int w, int h);
    GRect rect() const;

    void update ( GRect r );
    
    const GPixmap* backgroundPixmap() const
    {
        return &m_pixBg;
    }
    const GColor& backgroundColor() const
    {
        return m_bgColor;
    }
    virtual void fwKeyPress ( GKeyEvent* e );
    virtual void keyReleaseEvent ( GKeyEvent* e );
    virtual void paintEvent ( GPaintEvent* e );

private:
    bool fwKeyPressEvent ( GKeyEvent* );
    void initFocus();

private:
    QFormList m_frmList;
    GCtrlForm* m_pFocusForm;
    GCtrlDefaultAppStyle* m_pAppStyle;
    GPixmap  m_pixBg;
    GColor m_bgColor;
    GRect m_rect;
};


#endif

// have a nice day ^_^
